#ifndef FILE_MANAGER_H
#define FILE_MANAGER_H

#include <QString>
#include <QObject>
#include <QThread>

//#include "information.h"

QT_BEGIN_NAMESPACE
class QLabel;
class Information;
class Data_processing;
QT_END_NAMESPACE

/*****************************************************************************************
  @copyright qiaowei
  @author    qiaowei
  @version   1.0
  @date      2020-07-25
  @brief     文件处理类，根据UI传入的数据调用Data_processing类的指针data_processing_相应方法，和
             UI同在主线程中运行。在get_dialog_multithread方法中创建新线程运行data_processing
******************************************************************************************/
class File_manager : public QObject
{
    Q_OBJECT

public:
    explicit File_manager(QObject* parent = nullptr);
    ~File_manager();

//    QList<Information*>* create_dialog_one_thread(QWidget* parent = nullptr,
//                                       QLabel* station_label = nullptr,
//                                       QString caption = QString());

    /***************************************************************************
     @author   qiaowei
     @version  1.0
     @date     2021-01-08
     @brief    通过对话框读取台站信息
     @param    parent 父控件
     @param    caption 对话框标题
     @return   台站信息，保存在列表中
    ***************************************************************************/
    QList<Information*>* open_dialog_for_read_file_in_multithread(QWidget* parent = nullptr,
                                                                  QString caption = QString());

    /**
      @author   qiaowei
      @version  1.0
      @date     2020-08-02
      @brief    根据传入频率，计算是否与台站频率产生互调
      @param    frequency 输入频率
      @param    list 台站频率信息
      @return   true 有互调情况；false 没有互调情况
    */
//    bool calculate_frequency(double frequency, QList<Information*>* list);

    /***************************************************************************
     @author   qiaowei
     @version  1.0
     @date     2021-01-08
     @brief    功能同calculate_frequency，在thread_线程中进行互调计算
     @param    list 台站频率信息
     @return   true 互调计算
    ***************************************************************************/
    bool calculate_frequency_in_multithread(double frequency, QList<Information*>* list);

    void setup_connections();

signals:
    void signal_read_file_from_txt_file(const QString& file_name_and_path);

    void signal_station_name(const QString& station_name);

    void signal_frequency_informations(QList<Information*>* list);

    void signal_calculate_frequency_informations(double frequency, QList<Information*>* list);

    void signal_informations_to_model_view(QList<Information*>* list);

private:
    /**********************************************************
     @author   qiaowei
     @version  1.0
     @date     2020-12-31
     @brief    根据文件名读取文件数据，并将数据保存到QList对象中并返回
     @param    file_name_and_path 读取的文件名及路径
     @return   保存文件数据的QList对象
    ***********************************************************/
    QList<Information*>* read_file(QString file_name_and_path);

    /**********************************************************
     @author   qiaowei
     @version  1.0
     @date     2020-12-31
     @brief    获取打开的文件名，去除路径和文件名后缀
     @param    station_information 打开的文件名、文件后缀及文件路径
     @return   文件名
    ***********************************************************/
    QString get_station_name(QString station_information);

    /**********************************************************
     @author   qiaowei
     @version  1.0
     @date     2020-12-31
     @brief    将频率信息根据要求拆分
     @param    content 要拆分的字符串
     @return   保存拆分后信息的数据项
    ***********************************************************/
    Information* split_data(QString content);

private slots:

private:
    QThread thread_;
    Data_processing* data_processing_;
};

#endif // FILE_MANAGER_H
